package br.com.sicoob.model;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.Locale;

import br.com.bancoob.cedente.util.StringBib;


public class Util {

	public static final int NUM_CASAS_DECIMAIS = 2;

	public static String getValorFormatado(String valor) {
		try {
			double arredondado = truncaCasas(Double.parseDouble(valor), NUM_CASAS_DECIMAIS);

			//String mascara = "###,##0.00";
			NumberFormat nf = NumberFormat.getInstance( new Locale("pt","BR") );
			nf.setMaximumFractionDigits(NUM_CASAS_DECIMAIS);
			nf.setMinimumFractionDigits(NUM_CASAS_DECIMAIS);

			return nf.format(arredondado);
		}catch (Exception e) {
			return "";
		}
	}
	
	public static void main(String[] args) {
		System.out.println(getCPFFormatado("71773336000135"));
	}
	
	public static String getCPFFormatado(String valor) {
		try {
			String mascara;

			if(valor.length() == 11) {
				mascara = "###.###.###-##";
			}else {
				mascara = "##.###.###/####-##";
			}
			
			for (int i = 0; i < valor.length(); i++) {
				mascara = mascara.replaceFirst("#", ""+valor.charAt(i));
			}
			
			return mascara;
		}catch (Exception e) {
			return "";
		}
	}

	public static double truncaCasas(double valor,
			int nmrCasasDecimais) {		
		return new BigDecimal(valor).setScale(nmrCasasDecimais, BigDecimal.ROUND_HALF_DOWN ).doubleValue();
	}
	
	public static String truncaCasas(String valor,
			int nmrCasasDecimais) {		
		return new BigDecimal(valor).setScale(nmrCasasDecimais, BigDecimal.ROUND_HALF_DOWN ).toString();
	}

	public static String calculaDV(int numCooperativa, int numCliente, int numTitulo) {
//		NossoNumeroModel nNmr= new NossoNumeroModel();
//
//		String dv = nNmr.calculaDV(numCooperativa, numCliente, numTitulo);

		String somado = StringBib.formataInt(numCooperativa, 4)
		+ StringBib.formataInt(numCliente, 10)
		+ StringBib.formataInt(numTitulo, 7);
		String dv = inserirDV11(somado);
		return dv;
		
	}
	
	private static String inserirDV11(String sComposicao) {
		
		String sAux = "3791";
		int iAcumulador = 0;
		int i = sComposicao.length();
		int j = 0;
		
		while (i >= 1) {
			int iMultiplicador = Integer.parseInt(sAux.substring(j, j+1));
			iAcumulador = iAcumulador + (Integer.parseInt(sComposicao.substring(i-1, i)) * iMultiplicador);
			
			j = j + 1;
			
			if (j == 4) {
				j = 0;
			}
			i = i - 1;
		}
		int iResto = iAcumulador % 11;
		int iDV = 0;
		
		if (iResto == 0 || iResto == 1) {
			iDV = 0;
		} else {
			iDV = 11 - iResto;
		}
		
		return Integer.toString(iDV);
	}
	
}
